﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.SqlClient;
using System.Data;

namespace AccesoBD
{
    public class ConveniosObrasSociales
    {


        public Boolean registrarConvenioObraSocial(int idOs, DateTime fechaDesde, DateTime? fechaHasta, List<DetalleConvenioOS> listDc)
        {
            Boolean res = true;
            
            int cantInsertConv = 0;
            int cantInsertDetallesConv = 0;



            if (listDc.Count > 0)
            {

                SqlConnection conexion = DB.Conectar();
                SqlTransaction trans = null;
                try
                {
                    trans = conexion.BeginTransaction();


                    //crear ConvenioOS
                    string cmdConvenio = "INSERT INTO Convenio_OS (fechaVigenciaDesde, fechaVigenciaHasta) VALUES (@fechaVigenciaDesde1, @fechaVigenciaHasta1)";
                    List<SqlParameter> listaParam = new List<SqlParameter>();
                   
                    listaParam.Add(new SqlParameter("@fechaVigenciaDesde1", fechaDesde));
                    if (fechaHasta == null)
                    {
                        listaParam.Add(new SqlParameter("@fechaVigenciaHasta1", DBNull.Value));
                    }
                    else
                    {
                        listaParam.Add(new SqlParameter("@fechaVigenciaHasta1", fechaHasta));
                    }
                    cantInsertConv = DB.EjecutarCommand(cmdConvenio, listaParam, conexion, trans);

                    //obtener idConvenioOS
                    string cmdIdConvenioOS = "Select @@identity FROM Convenio_OS"; 
                    listaParam = new List<SqlParameter>();
                    int idConvenioOS = int.Parse(DB.EjecutarScalar(cmdIdConvenioOS, listaParam, conexion, trans));


                    //cargar detalles
                    if (cantInsertConv > 0)
                    {
                        foreach (DetalleConvenioOS itemDc in listDc)
                        {
                            string comando = "INSERT INTO Detalle_ConvenioOS (idConvenioOS, idEspecialidad, idPractica, fechaVigenciaDesde, fechaVigenciaHasta, precioAfiliado, precioMedico, periodoCarencia) VALUES (@idConvenioOS, @idEspecialidad, @idPractica, @fechaVigenciaDesde2, @fechaVigenciaHasta2, @precioAfiliado, @precioMedico, @periodoCarencia)";
                            List<SqlParameter> lstParametros = new List<SqlParameter>();
                            lstParametros.Add(new SqlParameter("@idConvenioOS", idConvenioOS));
                            if (itemDc.idEspecialidad == null)
                            {
                                lstParametros.Add(new SqlParameter("@idEspecialidad", DBNull.Value));
                            }
                            else
                            {
                                lstParametros.Add(new SqlParameter("@idEspecialidad", itemDc.idEspecialidad));
                            }
                            if (itemDc.idPractica == null)
                            {
                                lstParametros.Add(new SqlParameter("@idPractica", DBNull.Value));
                            }
                            else
                            {
                                lstParametros.Add(new SqlParameter("@idPractica", itemDc.idPractica));
                            }

                            lstParametros.Add(new SqlParameter("@fechaVigenciaDesde2", itemDc.fechaVigenciaDesde));
                            if (itemDc.fechaVigenciaHasta == null)
                            {
                                lstParametros.Add(new SqlParameter("@fechaVigenciaHasta2", DBNull.Value));
                            }
                            else
                            {
                                lstParametros.Add(new SqlParameter("@fechaVigenciaHasta2", itemDc.fechaVigenciaHasta));
                            }
                            
                            lstParametros.Add(new SqlParameter("@precioAfiliado", itemDc.precioAfiliado));
                            lstParametros.Add(new SqlParameter("@precioMedico", itemDc.precioMedico));

                            if (itemDc.periodoCarencia == null)
                            {
                                lstParametros.Add(new SqlParameter("@periodoCarencia", DBNull.Value));
                            }
                            else
                            {
                                lstParametros.Add(new SqlParameter("@periodoCarencia", itemDc.periodoCarencia));
                            }
                           
                             DB.EjecutarCommand(comando, lstParametros, conexion, trans);
                        }



                        
                    }

                    string comando2 = "UPDATE Obra_Social SET idConvenioOS = @idConvenioOS, tieneConvVigente = @tieneConvenio WHERE (idObraSocial = @idOs)";
                    List<SqlParameter> listaParam2 = new List<SqlParameter>();
                    listaParam2.Add(new SqlParameter("@idConvenioOs", idConvenioOS));
                    listaParam2.Add(new SqlParameter("@idOs", idOs));
                    listaParam2.Add(new SqlParameter("@tieneConvenio", true));

                    cantInsertDetallesConv = DB.EjecutarCommand(comando2, listaParam2, conexion, trans);

                    if (cantInsertDetallesConv > 0)
                    {
                        trans.Commit();
                        res = true;
                    }
                }
                catch (Exception)
                {
                    if (trans != null)
                        trans.Rollback();
                    res = false;
                    throw;
                }
                finally
                {
                    if (conexion != null && conexion.State == ConnectionState.Open)
                        conexion.Close();

                }
            }
            return res;
        }

    }
}
